package com.gking.centerSystem.utils;


import org.springframework.util.AntPathMatcher;

import java.util.List;

/**
 * 限制访问的工具类
 * 包括ip、地址、请求接口路径等
 */
public class LimitAccessUtil {

    /**
     * 判断远程子系统可以访问主系统某些接口的ip白名单
     *
     * @param ip 请求的ip
     * @return 可以访问返回 true
     */
    public static boolean remoteSubAccess(String ip) {
        //远程子系统访问主系统某些接口的服务器白名单
        String[] ips = new String[]{
                "127.0.0.1",
                "localhost",
                "120.26.171.117",
                "115.190.202.175"
        };

        for (String ipItem : ips) {
            if (ipItem.equals(ip)) return true;
        }

        return false;
    }

    /**
     * 判断远程子系统可以访问主系统某些接口的白名单
     *
     * @param ip 请求的ip
     * @param ips 可以访问的远程ip列表
     * @return 可以访问返回 true
     */
    public static boolean remoteSubAccess(String ip, List<String> ips) {
        for (String ipItem : ips) {
            if (ipItem.equals(ip)) return true;
        }

        return false;
    }


    /**
     * 判断不需要同一台设备访问的接口路径白名单
     *
     * @param requestURI 访问接口
     * @return  true为不需要相同设备，false为需要相同设备
     */
    public static boolean checkNoSameEquipment(String requestURI) {
        final AntPathMatcher PATH_MATCHER = new AntPathMatcher();
        //定义不需要处理的请求路径
        String[] urls = new String[]{
                "/user/limit/loginAuth",
                "/userRoles/limit/getUserRoles/**",
                "/rolePermissions/limit/rolePermissionsDetail/**",
        };

        for (String url : urls) {
            boolean match = PATH_MATCHER.match(url, requestURI);
            if (match) return true;
        }
        return false;
    }
}
